package es.webapp.exiquets.utils;

import javax.servlet.http.HttpSession;

import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.context.support.WebApplicationContextUtils;

import es.webapp.exiquets.domain.entities.User;
import es.webapp.exiquets.domain.entities.Usuariosanonimo;
import es.webapp.exiquets.domain.webforms.UsuarioWeb;
import es.webapp.exiquets.service.GestorUsuarios;

public class UserSessionHelper {

	public static UsuarioWeb getUserSession(){
		
		ServletRequestAttributes requestAttr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
		HttpSession session = requestAttr.getRequest().getSession();
		UsuarioWeb usuarioWeb = (UsuarioWeb) session.getAttribute(eXiquetsConstants.USER_SESION_KEY);
		
		WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(session.getServletContext());
		
		GestorUsuarios gestorUsuarios = (GestorUsuarios)ctx.getBean("gestorUsuarios");
		
		if(usuarioWeb == null){
			usuarioWeb = new UsuarioWeb();
			Object user =  SecurityContextHolder.getContext().getAuthentication().getPrincipal();
			if("java.lang.String".equalsIgnoreCase(user.getClass().getName())){
			    Usuariosanonimo usuario = gestorUsuarios.getUsuarioPorSession(requestAttr.getSessionId());
			    usuarioWeb.setTipoUsuario(eXiquetsConstants.USUARIO_TIPO_ANONIMO);
			    usuarioWeb.setUsuarioAnonimo(usuario);
			}else{
				User usuario = gestorUsuarios.getUsuarioPorMail(((org.springframework.security.core.userdetails.User) user).getUsername());
				usuarioWeb.setTipoUsuario(eXiquetsConstants.USUARIO_TPO_REGISTRADO);
				usuarioWeb.setUsuarioRegistrado(usuario);
			}
			
			session.setAttribute(eXiquetsConstants.USER_SESION_KEY, usuarioWeb);
		}
		
		return usuarioWeb;
	}
	
	public static void deleteUserSession(){
		ServletRequestAttributes requestAttr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
		HttpSession session = requestAttr.getRequest().getSession();
		
		session.removeAttribute(eXiquetsConstants.USER_SESION_KEY);
	}
}
